package psn.hui.sys.controller;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import psn.hui.sys.constant.SysConstant;
import psn.hui.sys.utils.AppFileUtils;
import psn.hui.sys.utils.DataGridView;
import psn.hui.sys.utils.RandomUtil;
import psn.hui.sys.utils.WebUtils;

/**
 * 文件上传、下载控制器
 * 
 * @author hui
 *
 */
@Controller
@RequestMapping("file")
public class FileController {

	/**
	 * 文件上传
	 * 
	 * @param request
	 * @param mf
	 * @return
	 * @throws IOException
	 */
	@RequestMapping("/uploadFile")
	@ResponseBody
	public DataGridView upload(MultipartFile mf) throws IOException {
		//构建返回结果
		DataGridView dataGridView = new DataGridView();
		try {
			// 文件上传的父目录
			String parentPath = AppFileUtils.PATH;
			String fileTypeDir = mf.getContentType();
			if(fileTypeDir == null || fileTypeDir == "") {
				fileTypeDir = "file";
			}
			// 得到当前日期作为文件夹的名称
			String dirName = fileTypeDir+"/"+RandomUtil.getCurrentDateForString();
			// 构造文件夹对象
			File dirFile = new File(parentPath, dirName);
			if (!dirFile.exists()) {
				dirFile.mkdirs();// 创建文件夹
			}
			// 得到文件原名
			String oldName = mf.getOriginalFilename();
			// 根据文件原名得到新名
			String newName = RandomUtil.createFileNameUserTime(oldName,SysConstant.FILE_UPLOAD_TEMP_SUFFIX);
			File dest = new File(dirFile, newName);
			mf.transferTo(dest);
			dataGridView.setCode(0);
			dataGridView.setMsg("上传成功");
			Map<String, Object> data = new HashMap<String, Object>();
			data.put("src", dirName + "/" + newName);
			dataGridView.setData(data);
		} catch (Exception e) {
			dataGridView.setCode(1);
			dataGridView.setMsg("上传失败");
			e.printStackTrace();
		}
		return dataGridView;
	}

	/**
	 * 下载的方法
	 * 
	 * @param path
	 * @param oldName
	 * @return
	 */
	@RequestMapping("downloadFile")
	public ResponseEntity<Object> downloadFile(String path, String oldName) {
		if (oldName == null) {
			oldName = "";
		}
		return AppFileUtils.downloadFile(WebUtils.getHttpServletResponse(), path, oldName);
	}
}
